# 快速遍历Windows盘的工具
# 高效遍历：使用os.scandir()和广度优先搜索（BFS）非递归算法，时间复杂度为O(n)。

# 低内存消耗：通过生成器逐项返回结果，避免一次性加载所有文件路径。

# 错误处理：跳过权限不足的目录和损坏的符号链接，确保程序稳定运行。

# 符号链接处理：通过follow_symlinks=False避免重复遍历符号链接目录。

import os
from collections import deque

def traverse_files(root_dir):
    """
    使用广度优先搜索（BFS）非递归遍历目录中的所有文件（含子目录）
    返回生成器以节省内存并提高效率
    """
    queue = deque([root_dir])
    while queue:
        current_dir = queue.popleft()
        try:
            with os.scandir(current_dir) as entries:
                for entry in entries:
                    if entry.is_dir(follow_symlinks=False):
                        queue.append(entry.path)
                    else:
                        yield entry.path
        except PermissionError:
            # 跳过权限不足的目录
            continue
        except OSError:
            # 处理其他可能的OS错误（如损坏的符号链接）
            continue

if __name__ == "__main__":
    import sys
    # 默认从命令行参数获取目录，若无参数则使用当前目录
    root = sys.argv[1] if len(sys.argv) > 1 else os.getcwd()
    
    # 示例：打印所有文件路径
    for file_path in traverse_files(root):
        print(file_path)